package vars

import (
	"d-serv-go/server/core/db"
	"strconv"
)

var OrgVar = newOrgVar()

type orgVar struct {
	// *bean.Bean
}

func newOrgVar() *orgVar {
	return &orgVar{
		// Bean: bean.NewBean(""),
	}
}

func (v *orgVar) init() {
	// TODO 从date var的初始化
}

func (v *orgVar) GetStr(key string) string {
	if v, ok := v.GetMap()[key].(string);ok {
		return v
	}
	return key
}

func (v *orgVar) GetMap() map[string]interface{} {
	vars := make(map[string]interface{})
	userBean := db.Ctx().GetUserBean()
	if userBean != nil {
		userCode := userBean.GetCode()
		vars = db.UserMgr.GetCacheVarMap(userCode)
		if vars != nil {
			return vars
		} else {
			vars = make(map[string]interface{})
			vars["@USER_CODE@"] = userBean.GetCode()             //用户编码
			vars["@USER_NAME@"] = userBean.GetName()             //用户名称
			vars["@LOGIN_NAME@"] = userBean.GetLoginName()       //用户登录名
			vars["@USER_POST@"] = userBean.GetPost()             //用户岗位
			vars["@USER_IDCARD@"] = userBean.GetIdcard()         //身份证号
			vars["@USER_SEX@"] = strconv.Itoa(userBean.GetSex()) //用户性别
			vars["@USER_BIRTHDAY@"] = userBean.GetBirthday()     //用户生日
			vars["@USER_IMG@"] = userBean.GetImg()               //截取后的头像文件
			vars["@USER_IMG_SRC@"] = userBean.GetImgSrc()        //原始头像文件
			vars["@CMPY_CODE@"] = userBean.GetCmpyCode()         //公司编码
			cmpy := db.OrgMgr.GetCmpy(userBean.GetCmpyCode())
			vars["@CMPY_NAME@"] = cmpy.GetName()                  //公司名称（简称）
			vars["@CMPY_FULLNAME@"] = cmpy.GetFullname()          //公司全名
			vars["@DEPT_CODE@"] = userBean.GetDeptCode()          //处室编码
			vars["@DEPT_NAME@"] = userBean.GetDeptName()          //处室名称
			vars["@DEPT_SRC_TYPE1@"] = userBean.GetDeptSrcType1() //处室扩展类型1
			vars["@DEPT_SRC_TYPE2@"] = userBean.GetDeptSrcType2() //处室扩展类型2
			vars["@DEPT_LINE@"] = userBean.GetDeptLine()          //部门业务条线
			vars["@TDEPT_CODE@"] = userBean.GetTDeptCode()        //部门编码（有效部门）
			vars["@TDEPT_NAME@"] = userBean.GetTDeptName()        //部门名称
			//vars["@TDEPT_SRC_TYPE1@"] = userBean.GetTDeptSrcType1()                //部门扩展类型1
			//vars["@TDEPT_SRC_TYPE2@"] = userBean.GetTDeptSrcType2()                //部门扩展类型2
			//vars["@OFFICE_PHONE@"] = userBean.GetOfficePhone()                     //办公电话
			vars["@USER_MOBILE@"] = userBean.GetMobile()                       //手机
			vars["@USER_EMAIL@"] = userBean.GetEmail()                         //邮箱
			vars["@ROLE_CODES@"] = userBean.GetRoleCodeQuotaStr()              //用户所有角色，单引号包含，逗号分隔
			vars["@ROLE_CODES0@"] = userBean.GetRoleCodeQuotaStr0()            //用户所有角色，仅逗号分隔
			vars["@GROUP_CODES@"] = userBean.GetGroupCodeQuotaStr()            //用户所有群组，单引号包含，逗号分隔
			vars["@ADMIN_GROUP_CODES@"] = userBean.GetAdminGroupCodeQuotaStr() //用户所有管理群组
			vars["@DEPT_CODES@"] = userBean.GetDeptCodeQuotaStr()              //用户所有部门，（当前、父、父的父...）
			vars["@ODEPT_CODE@"] = userBean.GetODeptCode()                     // 机构代码(有效部门的父)
			vars["@ODEPT_NAME@"] = userBean.GetODeptName()                     //机构名称
			vars["@ODEPT_FULL_NAME@"] = userBean.GetODeptFullName()            //机构全称
			//vars["@ODEPT_SRC_TYPE1@"] = userBean.GetODeptSrcType1()                //机构部门扩展类型1
			//vars["@ODEPT_SRC_TYPE2@"] = userBean.GetODeptSrcType2()                //机构部门扩展类型1
			vars["@ODEPT_CODE_PATH@"] = userBean.GetODeptCodePath()        //机构代码路径
			vars["@ODEPT_PCODE@"] = userBean.GetParentODeptCode()          //父机构代码
			vars["@ODEPT_LEVEL@"] = strconv.Itoa(userBean.GetODeptLevel()) //机构所在层级
			//vars["@SUB_CODES@"] = userBean.GetCurrentSubCodesQuotaStr()            //所有工作委托给当期人的用户列表
			//vars["@LEAD_CODES@"] = userBean.GetCurrentLeadCodesQuotaStr()          //秘书对应领导编码列表
			//vars["@JIAN_CODES@"] = userBean.GetCurrentJianCodes()                  //所有设定跟当前人工作兼岗的用户列表
			//vars["@AGT_FLAG@"] = String.valueOf(userBean.GetCurrentAgtFlag())      //当前用户是否出于委托别人办理状态
			//vars["@USER_CMLE_DEG@"] = String.valueOf(userBean.GetCurrentCmleDeg()) //当前用户的资料完整度
			// vars["@urlPath@"] = config.Instance.AppDir                           //虚路径变量
			vars["@USER_WORK_NUM@"] = userBean.GetStr("USER_WORK_NUM")           //用户工号
			vars["@USER_PASSWORD_DATE@"] = userBean.GetStr("USER_PASSWORD_DATE") //密码有效日期
			userState, _ := db.ServDao.FindById("SY_ORG_USER_STATE", userBean.GetCode(), false)
			if userState != nil && userState.Size() > 0 {
				vars["@USER_LAST_LOGIN@"] = userState.GetStr("USER_LAST_LOGIN") //密码有效日期
			}
			db.UserMgr.SetCacheVarMap(userCode, vars)
		}
	} else {
		vars = make(map[string]interface{})
	}
	return vars
}
